React Suspense và Error Boundaries: Xử lý Tải và Lỗi Nâng cao | MLOG | MLOG}> ); }; export default App;

Trong ví dụ này:

Tìm hiểu về Error Boundaries

Error Boundaries là các component React bắt lỗi JavaScript ở bất kỳ đâu trong cây component con của chúng, ghi lại các lỗi đó và hiển thị một giao diện người dùng dự phòng thay vì làm sập toàn bộ ứng dụng. Chúng cung cấp một cách để xử lý các lỗi không mong muốn một cách mượt mà, cải thiện trải nghiệm người dùng và làm cho ứng dụng của bạn mạnh mẽ hơn.

Các khái niệm chính của Error Boundaries

Triển khai Error Boundaries cơ bản

Đây là một ví dụ đơn giản về cách tạo một Error Boundary:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Cập nhật state để lần render tiếp theo sẽ hiển thị giao diện người dùng dự phòng.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Bạn cũng có thể ghi lại lỗi vào một dịch vụ báo cáo lỗi
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Bạn có thể render bất kỳ giao diện người dùng dự phòng tùy chỉnh nào
      return 

Đã có lỗi xảy ra.

; } return this.props.children; } } export default ErrorBoundary;

Trong ví dụ này:

Sử dụng Error Boundaries

Để sử dụng component `ErrorBoundary`, chỉ cần bao bọc các component mà bạn muốn bảo vệ bằng nó:


import React from 'react';
import ErrorBoundary from './ErrorBoundary';

const MyComponent = () => {
  // Mô phỏng một lỗi
  throw new Error('Đã xảy ra lỗi!');
};

const App = () => {
  return (
    
      
    
  );
};

export default App;

Trong ví dụ này, nếu có lỗi xảy ra trong `MyComponent`, component `ErrorBoundary` sẽ bắt lỗi và hiển thị giao diện người dùng dự phòng.

Kết hợp Suspense và Error Boundaries

Suspense và Error Boundaries có thể được kết hợp để cung cấp một chiến lược xử lý lỗi mạnh mẽ và toàn diện cho các hoạt động bất đồng bộ. Bằng cách bao bọc các component có thể bị tạm dừng bằng cả Suspense và Error Boundaries, bạn có thể xử lý cả trạng thái tải và các lỗi không mong muốn một cách mượt mà.

Ví dụ về việc kết hợp Suspense và Error Boundaries


import React, { Suspense } from 'react';
import ErrorBoundary from './ErrorBoundary';

// Mô phỏng việc tìm nạp dữ liệu (ví dụ: từ một API)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Mô phỏng tìm nạp dữ liệu thành công
      // resolve({ name: 'John Doe', age: 30 });

      // Mô phỏng lỗi trong quá trình tìm nạp dữ liệu
      reject(new Error('Không thể tìm nạp dữ liệu người dùng'));

    }, 2000);
  });
};

// Tạo một resource mà Suspense có thể sử dụng
const createResource = (promise) => {
  let status = 'pending';
  let result;
  let suspender = promise().then(
    (r) => {
      status = 'success';
      result = r;
    },
    (e) => {
      status = 'error';
      result = e;
    }
  );

  return {
    read() {
      if (status === 'pending') {
        throw suspender;
      } else if (status === 'error') {
        throw result;
      }

      return result;
    },
  };
};

const userData = createResource(fetchData);

// Component đọc từ resource
const UserProfile = () => {
  const data = userData.read();
  return (
    

Tên: {data.name}

Tuổi: {data.age}

); }; const App = () => { return ( Đang tải dữ liệu người dùng...}> ); }; export default App;

Trong ví dụ này:

Các kỹ thuật nâng cao và Thực hành tốt nhất

Tối ưu hóa hiệu suất Suspense

Error Boundaries tùy chỉnh

Bạn có thể tạo các Error Boundaries tùy chỉnh để xử lý các loại lỗi cụ thể hoặc để cung cấp các thông báo lỗi nhiều thông tin hơn. Ví dụ, bạn có thể tạo một Error Boundary hiển thị một giao diện người dùng dự phòng khác nhau dựa trên loại lỗi đã xảy ra.

Render phía máy chủ (SSR) với Suspense

Suspense có thể được sử dụng với Render phía máy chủ (SSR) để cải thiện hiệu suất tải trang ban đầu. Khi sử dụng SSR, bạn có thể render trước trạng thái ban đầu của ứng dụng trên máy chủ và sau đó truyền trực tuyến (stream) nội dung còn lại cho máy khách. Suspense cho phép bạn xử lý việc tìm nạp dữ liệu bất đồng bộ trong quá trình SSR và hiển thị các chỉ báo tải trong khi dữ liệu đang được truyền.

Xử lý các kịch bản lỗi khác nhau

Hãy xem xét các kịch bản lỗi khác nhau này và cách xử lý chúng:

Xử lý lỗi toàn cục

Triển khai một cơ chế xử lý lỗi toàn cục để bắt các lỗi không được bắt bởi Error Boundaries. Điều này có thể được thực hiện bằng cách sử dụng một trình xử lý lỗi toàn cục hoặc bằng cách bao bọc toàn bộ ứng dụng trong một Error Boundary.

Ví dụ và Trường hợp sử dụng trong thực tế

Ứng dụng Thương mại điện tử

Trong một ứng dụng thương mại điện tử, Suspense có thể được sử dụng để hiển thị các chỉ báo tải trong khi tìm nạp dữ liệu sản phẩm, và Error Boundaries có thể được sử dụng để xử lý các lỗi xảy ra trong quá trình thanh toán. Ví dụ, hãy tưởng tượng một người dùng từ Nhật Bản đang duyệt một cửa hàng trực tuyến đặt tại Hoa Kỳ. Hình ảnh và mô tả sản phẩm có thể mất một chút thời gian để tải. Suspense có thể hiển thị một hoạt ảnh tải đơn giản trong khi dữ liệu này được tìm nạp từ một máy chủ có thể ở nửa vòng trái đất. Nếu cổng thanh toán thất bại do sự cố mạng tạm thời (phổ biến trên các cơ sở hạ tầng internet khác nhau trên toàn cầu), một Error Boundary có thể hiển thị một thông báo thân thiện với người dùng, yêu cầu họ thử lại sau.

Nền tảng Mạng xã hội

Trong một nền tảng mạng xã hội, Suspense có thể được sử dụng để hiển thị các chỉ báo tải trong khi tìm nạp hồ sơ người dùng và bài đăng, và Error Boundaries có thể được sử dụng để xử lý các lỗi xảy ra khi tải hình ảnh hoặc video. Một người dùng duyệt web từ Ấn Độ có thể gặp phải thời gian tải chậm hơn đối với các phương tiện được lưu trữ trên các máy chủ ở Châu Âu. Suspense có thể hiển thị một trình giữ chỗ cho đến khi nội dung được tải đầy đủ. Nếu dữ liệu hồ sơ của một người dùng cụ thể bị hỏng (hiếm nhưng có thể xảy ra), một Error Boundary có thể ngăn toàn bộ bảng tin mạng xã hội bị sập, thay vào đó hiển thị một thông báo lỗi đơn giản như "Không thể tải hồ sơ người dùng".

Ứng dụng Bảng điều khiển (Dashboard)

Trong một ứng dụng bảng điều khiển, Suspense có thể được sử dụng để hiển thị các chỉ báo tải trong khi tìm nạp dữ liệu từ nhiều nguồn, và Error Boundaries có thể được sử dụng để xử lý các lỗi xảy ra khi tải biểu đồ hoặc đồ thị. Một nhà phân tích tài chính ở London truy cập vào một bảng điều khiển đầu tư toàn cầu có thể đang tải dữ liệu từ nhiều sàn giao dịch trên khắp thế giới. Suspense có thể cung cấp các chỉ báo tải cho mỗi nguồn dữ liệu. Nếu API của một sàn giao dịch bị sập, một Error Boundary có thể hiển thị một thông báo lỗi cụ thể cho dữ liệu của sàn giao dịch đó, ngăn toàn bộ bảng điều khiển trở nên không thể sử dụng được.

Kết luận

React Suspense và Error Boundaries là những công cụ thiết yếu để xây dựng các ứng dụng React linh hoạt và thân thiện với người dùng. Bằng cách sử dụng Suspense để quản lý trạng thái tải và Error Boundaries để xử lý các lỗi không mong muốn, bạn có thể cải thiện trải nghiệm người dùng tổng thể và đơn giản hóa quy trình phát triển. Hướng dẫn này đã cung cấp một cái nhìn tổng quan toàn diện về Suspense và Error Boundaries, bao gồm mọi thứ từ các khái niệm cơ bản đến các kỹ thuật nâng cao. Bằng cách tuân theo các thực hành tốt nhất được nêu trong bài viết này, bạn có thể xây dựng các ứng dụng React mạnh mẽ và đáng tin cậy, có khả năng xử lý ngay cả những tình huống khó khăn nhất.

Khi React tiếp tục phát triển, Suspense và Error Boundaries có khả năng sẽ đóng một vai trò ngày càng quan trọng trong việc xây dựng các ứng dụng web hiện đại. Bằng cách làm chủ các tính năng này, bạn có thể đi trước xu hướng và mang lại những trải nghiệm người dùng đặc biệt.